// 创建UUID
import dayjs from 'dayjs'
import isBetween from 'dayjs/plugin/isBetween.js'

dayjs.extend(isBetween)

const hexList: string[] = []
for (let i = 0; i <= 15; i++) {
  hexList[i] = i.toString(16)
}

export function buildUUID(): string {
  let uuid = ''
  for (let i = 1; i <= 36; i++) {
    if (i === 9 || i === 14 || i === 19 || i === 24) {
      uuid += '-'
    } else if (i === 15) {
      uuid += 4
    } else if (i === 20) {
      uuid += hexList[(Math.random() * 4) | 8]
    } else {
      uuid += hexList[(Math.random() * 16) | 0]
    }
  }
  return uuid.replace(/-/g, '')
}

/**
 * 日期格式：YYYY-MM-DD HH:mm:ss
 * @param startDateTime 开始日期
 * @param endDateTime 结束日期
 * @param dateTimeToCheck 需要判断的日期
 */
export const isDateTimeInRange = (startDateTime, endDateTime, dateTimeToCheck) => {
  // 将输入的日期转换为Day.js对象
  const start = dayjs(startDateTime)
  const end = dayjs(endDateTime)
  const check = dayjs(dateTimeToCheck)

  // 判断日期是否在范围内
  return check.isBetween(start, end, undefined, '[]') // '[]'表示包括起始和结束日期
}

/**
 * 根据指定的开始结束日期，获取范围内的一个随机时间
 * @param startDate 开始日期 YYYY-MM-DD
 * @param endDate 结束日期 YYYY-MM-DD
 * @returns 返回一个随机时间 YYYY-MM-DD HH:mm:ss
 */
export function getRandomDateTime(startDate, endDate) {
  const start = dayjs(startDate) // 设置随机时间的起始日期
  const end = dayjs(endDate) // 设置随机时间的结束日期
  const duration = end.diff(start) // 计算起始日期和结束日期之间的毫秒数
  const randomDate = start.add(Math.random() * duration) // 生成随机日期
  const randomTime = dayjs(randomDate).format('HH:mm:ss') // 生成随机时间并格式化
  return randomDate.format('YYYY-MM-DD ') + randomTime // 返回随机日期和时间的字符串表示
}

/**
 * 获取当前的日期+时间
 */
export function getNowDateTime() {
  return dayjs().format('YYYY-MM-DD HH:mm:ss')
}

/**
 * 获取当前的日期
 */
export function getNowDate() {
  return dayjs().format('YYYY-MM-DD')
}

/**
 * 获取未来 N 年后的今天的日期
 */
export function getFeatureDate(n: number) {
  return dayjs()
    .year(dayjs().year() + n)
    .format('YYYY-MM-DD')
}
